package day17;

import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class Demo04 {
	public static void main(String[] args) {
		test02();
	}

	private static void test03() {
		// 希望TreeSet存储字符串时, 按照字符串的长度排序
		// String已经具备了自然顺序, 且自然顺序不符合我们的排序要求
		// 或元素不具备自然顺序
		Comparator<String> com = new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return o1.length() - o2.length();
			}
		};

		// 创建TreeSet<E>集合时, 提供一个比较器
		// 集合在存储元素时, 就会忽略元素的自然顺序
		// 而按照比较器所定义的规则进行元素的比较
		Set<String> set = new TreeSet<String>(com);
		set.add("1111");
		set.add("111");
		set.add("11111");
		set.add("11");
		set.add("111111");

		System.out.println(set);

	}

	private static void test02() {
		//		Set<Integer> set = new TreeSet<Integer>();
		//		set.add(3);
		//		set.add(1);
		//		set.add(9);
		//		set.add(2);
		//		set.add(4);
		//		set.add(8);
		//		set.add(6);
		//		System.out.println(set);

		//		Set<String> set2 = new TreeSet<String>();
		//		set2.add("alice");
		//		set2.add("tom");
		//		set2.add("LaoWang");
		//		set2.add("LaoLi");
		//		set2.add("jack");
		//		System.out.println(set2);

		Person p1 = new Person().setId(1L).setName("alice").setAge(22);
		Person p2 = new Person().setId(2L).setName("tom").setAge(23);
		Person p3 = new Person().setId(3L).setName("LaoWang").setAge(20);
		Person p4 = new Person().setId(4L).setName("jack").setAge(22);

		Comparator<Person> com = new Comparator<Person>() {
			@Override
			public int compare(Person o1, Person o2) {
				if (Integer.compare(o1.getAge(), o2.getAge()) == 0) {
					return Long.compare(o1.getId(), o2.getId());
				}
				return Integer.compare(o1.getAge(), o2.getAge());
			}
		};

		Set<Person> set3 = new TreeSet<Person>(com);
		set3.add(p1); // java.lang.ClassCastException; day17.Person => java.lang.Comparable
		set3.add(p2);
		set3.add(p3);
		set3.add(p4);
		for (Person p : set3) {
			System.out.println(p.getId() + ", " + p.getName() + ", " + p.getAge());
		}

	}

	private static void test01() {
		Set<Person> set = new HashSet<Person>();
		Person p1 = new Person().setId(1L).setName("alice").setAge(22);
		Person p2 = new Person().setId(2L).setName("tom").setAge(23);
		Person p3 = new Person().setId(3L).setName("LaoWang").setAge(20);
		set.add(p1);
		set.add(p2);
		set.add(p3);

		Person p4 = new Person().setId(1L).setName("alice").setAge(22);
		set.add(p4);

		for (Person p : set) {
			System.out.println(p.getId() + ", " + p.getName() + ", " + p.getAge());
		}

	}
}
